<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>generator</title>
</head>
<body>
<script src="../jquery-1.3.1.js"></script>
<script>
    /*
    * generator函数是一个状态机(迭代生成器, 封装了多个内部状态,返回值是一个迭代器(iterator));
    * generator可以用于 异步调用
    * */

    //语法
    //generator函数 在function后面加一个 *
    //generator函数内部 有一个 yield表达式
    //当generator函数第一次执行的时候,不会有任何效果
    //在generator函数内部当执行next方法的时候,遇到yield表达式会停止执行
    //generator函数想要继续执行需要手动的调用next方法
    //next方法返回的是yield表达式之后的值, 并且done属性为false,继续使用next方法执行,直到done值为true的时候表示整个generator执行完毕

   /* function * gen(){
        console.log("generator函数--1");
        yield "a";
        console.log("generator函数--2");
        yield "b";
        console.log("generator函数--3");
        return "c";
    }

    let it = gen();
    console.log(it.next());//{value: "a", done: false}
    console.log(it.next());//{value: "b", done: false}
    console.log(it.next());//{value: "c", done: true}
    console.log(it.next());//{value: undefined, done: true}*/

    // //传参
    //  function * gen(x){
    //     console.log("generator函数--1", x);
    //     let a1 = yield "a";
    //     console.log("generator函数--2", a1);//30
    //     let a2 = yield "b";
    //     console.log("generator函数--3", a2);//40
    //     return "c";
    // }
    //
    // let it = gen(10);
    // console.log(it.next(20));//第一个next的传参没有任何意义
    // console.log(it.next(30));//{value: "b", done: false}
    // console.log(it.next(40));//{value: "c", done: true}
    // // console.log(it.next(50));//{value: undefined, done: true}

    function myAjax(url){
        $.ajax({
            url: url,
            success(data){
                console.log("====>",data);
                getTxtDataIt.next()
            }
        })
    }

    function * getTxtData(){
        yield myAjax("./aaa.txt");
        yield myAjax("./bbb.txt");
        yield myAjax("./ccc.txt");
    }
    let getTxtDataIt = getTxtData();
    getTxtDataIt.next()


    // async await ==> promise和generator的语法糖
</script>
</body>
</html>